
// Funzioni generiche

void randomizza_array(int array[], int lunghezza) {
	assert(lunghezza>0);
	int i, newpos, temp;
	for(i = lunghezza-1; i > 0; i--) {
		newpos = (int)((double)rand()/RAND_MAX * (i+1)); // come rand() % (i+1)
		// scambia
		temp = array[i];
		array[i] = array[newpos];
		array[newpos] = temp;
	}
	return;
}

int min(int a, int b) {
	return (a < b) ? a : b;
}

int abs(int n) {
	return (n < 0) ? -n : n;
}

int minimo_di_tre(int a, int b, int c){
	if(a < min(b, c)) return a;
	else return min(b, c);
}

int mod(int x, int m) {
	// -3 % 5 restituisce ancora -3 !!!
	return (x % m + m) % m;
}

// Restituisce il numero di caratteri di cui è composta una stringa (\0 escluso)
int sizeof_string(char stringa[]) {
	int l = 0;
	while (stringa[l] != '\0') l++;
	return l;
}

// Legge una riga da stdin e restituisce il primo numero intero trovato (-1 se non ce ne sono)
int leggi_intero() {
	char stringa[512];
	int len;
	
	// Reads characters from stream and stores them as a C string
	// into str until (num-1) characters have been read or either
	// a newline or the End-of-File is reached, whichever comes first.
	fgets(stringa, 512, stdin);
	len = sizeof_string(stringa);
	
	if (len >= 511) {
		printf("Errore: la riga inserita è troppo lunga per essere letta\n");
		// Finisci di leggere la riga
		while (sizeof_string(stringa) >= 511) {
			fgets(stringa, 512, stdin);
			len = sizeof_string(stringa);
		}
		// La riga è troppo lunga
		return -1;
	}
	
	char *pstr;
	int letti, numero;
	for (pstr = stringa; pstr < stringa + len; pstr++) {
		letti = sscanf(pstr, " %d", &numero);
		
		// Se hai letto qualcosa di giusto, fermati
		if (letti == 1) return numero;
	}
	
	// Non c'era un numero sulla riga
	return -1;
}


// da spostare? ma dove?
void stampa_su_file_risultati(int tabella_punti[7][8], FILE* file){
	int i;
	
	fprintf(file, "\nRosso     \t\t");
	for(i = 0; i < 7; i++){
		fprintf(file, "%d\t\t", tabella_punti[i][0]);
	}
	
	fprintf(file, "\nSoldi     \t\t");
	for(i = 0; i < 7; i++){
		fprintf(file, "%d\t\t", tabella_punti[i][1]);
	}
	
	fprintf(file, "\nMeraviglia\t\t");
	for(i = 0; i < 7; i++){
		fprintf(file, "%d\t\t", tabella_punti[i][2]);
	}
	
	fprintf(file, "\nBlu       \t\t");
	for(i = 0; i < 7; i++){
		fprintf(file, "%d\t\t", tabella_punti[i][3]);
	}
	
	fprintf(file, "\nGiallo    \t\t");
	for(i = 0; i < 7; i++){
		fprintf(file, "%d\t\t", tabella_punti[i][4]);
	}
	
	fprintf(file, "\nViola     \t\t");
	for(i = 0; i < 7; i++){
		fprintf(file, "%d\t\t", tabella_punti[i][5]);
	}
	
	fprintf(file, "\nVerde     \t\t");
	for(i = 0; i < 7; i++){
		fprintf(file, "%d\t\t", tabella_punti[i][6]);
	}
	
	fprintf(file, "\nTotale    \t\t");
	for(i = 0; i < 7; i++){
		fprintf(file, "%d\t\t", tabella_punti[i][7]);
	}
	fprintf(file, "\n\n");
	
	return;
}
